package golang

import "gitee.com/allowall-package/goutil/fn"

// 抽象产品角色 工厂接口
type SimpleFactory interface {
	Say(name string) string
}

// ---------------分割线---------------

// 具体产品角色 实现类1方法
type SimpleFactory1 struct{}

func (f *SimpleFactory1) Say(name string) string {
	return name + " say SimpleFactory1"
}

// ---------------分割线---------------

// 具体产品角色 实现类2方法
type SimpleFactory2 struct{}

func (f *SimpleFactory2) Say(name string) string {
	return name + " say SimpleFactory2"
}

// 工厂角色
func NewSimpleFactory(t int) SimpleFactory {
	var f SimpleFactory
	if t == 1 {
		f = &SimpleFactory1{}
	} else {
		f = &SimpleFactory2{}
	}

	return f
}

// ---------------分割线---------------

// 测试方法
func SimpleFactoryTest() {
	fn.Dump(fn.FuncInfo(), NewSimpleFactory(1).Say("tom"))
}
